import argparse


def get_parser_args():
    """
    Parses the node2vec arguments.
    """
    # 使用parser加载信息
    parser = argparse.ArgumentParser(formatter_class=argparse.ArgumentDefaultsHelpFormatter, conflict_handler='resolve')
    # 输入文件
    parser.add_argument('--input', default='../../data/cora/cora_edgelist.txt',
                        help='Input graph file')
    # 训练结果embedding输出文件
    parser.add_argument('--output', default='../../data/cora/Vec.emb',
                        help='Output representation file')
    # 并行参数
    parser.add_argument('--workers', default=8, type=int,
                        help='Number of parallel processes.')
    # 处理有/无权图
    parser.add_argument('--weighted', action='store_true', default=False,
                        help='Treat graph as weighted')
    # epoch数量
    parser.add_argument('--epochs', default=100, type=int,
                        help='The training epochs of SDNE')
    # dropout比例值
    parser.add_argument('--dropout', default=0.5, type=float,
                        help='Dropout rate (1 - keep probability)')

    parser.add_argument('--weight-decay', type=float, default=5e-4,
                        help='Weight for L2 loss on embedding matrix')
    # 学习率设置
    parser.add_argument('--lr', default=0.001, type=float,
                        help='learning rate')
    # 模型参数，一阶相似度和二阶相似度之间的比重
    parser.add_argument('--alpha', default=1e-2, type=float,
                        help='alhpa is a hyperparameter in SDNE')
    # 图的稀疏性问题，论文中的参数beta, 侧重学习邻接矩阵中为1的值
    parser.add_argument('--beta', default=5., type=float,
                        help='beta is a hyperparameter in SDNE')

    parser.add_argument('--nu1', default=1e-5, type=float,
                        help='nu1 is a hyperparameter in SDNE')

    parser.add_argument('--nu2', default=1e-4, type=float,
                        help='nu2 is a hyperparameter in SDNE')
    # batch大小
    parser.add_argument('--bs', default=100, type=int,
                        help='batch size of SDNE')
    # 自编码器第一层神经元个数
    parser.add_argument('--nhid0', default=1000, type=int,
                        help='The first dim')
    # 自编码器第二层神经元个数
    parser.add_argument('--nhid1', default=128, type=int,
                        help='The second dim')
    # 学习率步长设置
    parser.add_argument('--step_size', default=10, type=int,
                        help='The step size for lr')
    # 学习率gamma值设置
    parser.add_argument('--gamma', default=0.9, type=int,
                        help='The gamma for lr')
    parser.set_defaults(directed=False)

    return parser.parse_args()
